#include "myRect.h"
#include "myString.h"
#include "Bochka.h"
#include <iostream>

#define stop __asm nop

int main()
{
	using namespace std;
	int test(5);
	stop
	//������� 1.���������� ������. �������� ���������� ������.
	//����� ������� ������. 
	//�������� �������� Class View - (����� �� ������� ����� ������� �
	//������ - ������� Rect � MyString)
	//�������� �������� �� ����������� ����� �� ���� ������ ������ - ���
	//���������� ������������ ������� � ������� ����� ������.



	//����� ����������� ���������� ��� �������� ���������� ������?
	{
		Rect rect;//����������� �� ��������� (default)
		stop
	}

	//1a. �������� � ���������� ����������� � ����������� ���
	//������������� ���������� ������. �������� ��������� ������ Rect
	//� ������� ������������ � �����������. ���� ���������� ������
	//������ � ���������� ���������, ��������� - ���� ��� ��
	//�������? ��������� ���������� ������.
	//�������� ������� � ������ ������ �� �����, ����������:
	//� ����� ������ ���������� ����� ������������(������?)?

	//���������*: ������ ���� �� ������ ��� ����, ��� �������������
	//����� ��������� "�����������������", �� ���� m_left>m_right ���/�
	//m_top>m_bottom
	//���������: ������, ��� ������������ ������ ������ ����� ���������
	//� �������� ���������� ����� ��������! ��������:

	Rect rrr(4, 3, 2, 1);
	Rect rect1(-1);
	stop

	//1�. ��� ��������������� ������� ����������� ������������ ��� ����������
	//������������� ������������� ���������� ������, ��������, �����

	Rect rect;
	stop

	//1�. ��������, ���������� � �������� ����� ������ InflateRect(), 
	//������� ����������� ������� �������������� �� �������� ����������
	//(��������� ������� �� ������ - ������ ������� �� ���� ��������).
	//���������: �������� � ���������� ������ ����� �� ������ "�������",
	//�� � � ������� Wizard-a Class View. ��� �����: �������� ��������
	//ClassView ���� �������, �������� �������� ����� Rect � �������
	//������ ������ ���� - � ����������� ����������� ���� ��������
	//Add/Add Member Function... � ������� ����������� ���������� ������
	//"����� ��������" Wizard-� ��� �������� � ���������� �����.

	rrr.InflateRect(1, 1);
	stop

	//������� 2.���������� ������������� � ������� ������.
	//����������� �����������.

	//2�.�������� � ���������� ����������� ����������� � ������ Rect.
	//�������� ������� �� �����, ����������, �����
	//����������� ���������� ��� �������� r1,r2,r3 � r4?
	//���� ����� ���������� ��������� ��������?
	Rect r1;//����������� � ����������� �� ���������
	Rect r2(1,2,3,4);//����������� � �����������
	Rect r3 = r1;//����������� �����������
	Rect r4(r2);//����������� �����������
	stop


	//2�. �������� � ���������� � ������ Rect ����� InflateRect(),
	//������� ��������� ��� ���������, �� ��������� ������ 1, �
	//���������� ������� �������������� �� �� �������� ����������.
	//��� ����� �������� ���������� ������� InflateRect()?
	r1.InflateRect(1,1);
	r2.InflateRect(2,2);
	//����� �� ������� InflateRect() ���������� � ������ �� ���� �������?
	r3.InflateRect(2,2,2,2);
	r3.InflateRect(3,3);
	r3.InflateRect(5);
	r3.InflateRect();
	stop



	//������� 3.������������� �������. ������������.
	{
	Rect r;
	//���������������� ��������� ������. ��������� ������
	//�����������

	//int tmp = r.m_left; 
	//������ ��������� � ���������� ������� ������ (private)


	//������� � ����� Rect ����� void SetAll(...),
	//������� ����������� ���������� ������ ������������
	//��������. �������� ��������� �����, ��������� ������������.

	r.SetAll(2, 2, 2, 2);
	r.SetAll(4, 3, 2, 1);
	stop

	//������� � ����� Rect ������ ����� GetAll(...),
	//������� "�������" �������� private-���������� ������.
	//�������� ��������� �����, ��������� ������������.

	int left, right, top, bottom;
	r.GetAll(left, right, top, bottom);
	stop
	}

	
	//������� 4.�������� ���������� ������ � �������� ���������
	//�������. ����������� ������� ������ �� ��������. ��������
	//�������� � ������������ ����������� ��� �������� ��������
	//�� �����, ����������: � ����� ������ ���������� ���������
	//� ������������ �����������.
	//�������� ���������� �������
	// Rect BoundingRect(Rect, Rect);
	//������� ��������� ��� ������� ������ Rect �� �������� �
	//���������� ������ ������ Rect, ������� �������� ���������������,
	//� ������� ������� �������� ��������������. ��� ����������
	//�������� ���������� � ����������� ������� ������?



	{

		Rect r1(1,2,3,4), r2(5,6,7,8),r3;
		r3= BoundingRect(r1, r2); //����������� ����������� ����������� �� ����������� ������ ������� � �� ����� return
		stop

	//������� 4�. �������� �������� �� ������.
	//�������� ���������� ������� BoundingRect2, ������� ��������� �� ��
	//������, �������� ��������� �� ������
	//���������� �� ������������ ��� �������� ����������?


		r3 = BoundingRect2(r1, r2); //��� �������� �� ����������, ������ �� ����� return
		stop
	}

	//������� 4�.���������� �� �� ������ (BoundingRect) ������� ������
	Rect r0;
	//r0.BoundingRect(rrr, rect1);

	r0 = rrr.BoundingRect(rect1);
	stop
		
	//������� 5. ����� ���������� ������������ � �����������.
	//�������� � ����������
	//����� ���������� ������. ��������� �������� �
	//������������ (�������������) � �����������. ����������: ����� ���
	//������� �� �������� ���������� �����������, � ����� - ����������?
	{
		Rect r1;//����������� ��� ����������(����������)
		Rect*	pR = new Rect(1,2,1,2);//����������� � �����������
		{
			Rect r2(r1);//����������� ����������
			Rect arRect[2];//����������� ��� ����������(����������) ��� ������� ������� � �������
			for(int i=0; i<3; i++)
			{
				static Rect r3 (i,i,i,i) ;//����������� � �����������
				Rect r4(*pR);//����������� �����������
				Rect r5(i,i,i,i);//����������� � �����������
			}//����������� r4, r5 
		}//����������� r2, � ������� �� ��������� �������
		delete pR;//���������� Rect(1,2,1,2)
		stop
	}////���������� r1
		

	//������� 6.����������� + ���������� = ��������������
	// ���������. ����� MyString
	// ����������� ������������ (�������������) � ����������� ����������
	//���������� ������������� � ����������� �������
	//C ������� ��������� ���������� ����� ����������
	//������ � ������������ ������ ��� ������-����� ������
	{
		MyString	str1("It's my string1!");
		//�������� ����� GetString(), ������� ��������� ������ � ���������� ������.
		//� ������� cout � ������ GetString() ������������ ������ ������� str1
		//���������: ���������, ��� ������� ��������� ����������� ����� GetString().

		//��������� 1:
		//����������� ���� ��� ������ ��������:
		std::cout<<str1.GetString()<<std::endl;

		//��������� 2:
		//����������� ���� ��� �� ������ ��������:
		//str1.GetString()[1] = 'W';

		//��������� 3:
		//����������� ���� ��� ������ ��������:
		const MyString	str2("It's my string2!");
		std::cout<<str2.GetString()<<std::endl;
	}
			stop
		
		
	//6a. ���������������� ��������� ��������. ��������� - �����
	//������������ ��� �������. ���������� ��������� ��������� (���?)
		{
			MyString str1("The first string!");
			MyString str2 = str1;
		}
		stop

	//6�. ���������� ����� SetNewString, ������� ����� �������� ������
	// �� �����
		{
				MyString	str1("My string!");
				const MyString	str2("My string2!");
		
		std::cout << str1.GetString() << std::endl;
		std::cout << str2.GetString() << std::endl;

				str1.SetNewString("The first string!");
				std::cout << str1.GetString() << std::endl;
		}
		
		stop
		

		//������� 7.  ������ � ������� ������� ��������� ������:
		//���� ��� ����� ���������� ������. � ����� ����� � ��������� ������
		//������� ���������� ����� (96%), � ������ � ����.
		//������� �������� 1� ���������� ���������� ���������� �� ����� �����
		//� ������ ��������� ��������: �� ������ ��������
		//���������� �� ������ ����� -> ������ �� ������
		//���������� �� ������ ����� -> ������ � ������.
		//��������� ���������� ����� ��������, �� ������� ������������ ������ �
		//������ ����� ������ ������ 50%.

		Bochka spirt(100, 0.96);   //100 - 159
		Bochka water(100, 0);
		
		int counter = 0;

		while(spirt.Get_m_spirt_value() > 0.5)
		{
				spirt.Pereliv(water,1); //��� spirt.Pereliv(water, �����_������); (v1 * k1 + v2*k2)/(v1+v2)
				water.Pereliv(spirt,1); // ����������
				counter++;
		}
		std::cout << counter << std::endl;
		
		return 0;

}//end_main

